第 8 章:設定 Terraform 環境變數
Terraform 使用一系列的環境變數來客製化各方面的行為。如果只是想簡單使用 Terraform,我們並不需要設定這些環境變數;但他們可以在一些不常見的場景下幫助我們改變 Terraform 的預設行為,或是出於偵錯目的修改輸出日誌的等級。
TF_LOG
此環境變數可以設定 Terraform 內部日誌的輸出級別,例如:
export TF_LOG=TRACE
- 日誌等級有
TRACE
、DEBUG
、INFO
、WARN
和ERROR
TRACE
包含的資訊最多也最冗長,如果TF_LOG
被設定為這五級以外的值時 Terraform 會預設使用TRACE
- 如果在使用 Terraform 的過程中遇到未知的錯誤並懷疑是 Terraform 或相關外掛程式的 bug,請設定
TF_LOG
等級後收集輸出的日誌並提交給相關人員
TF_LOG_PATH
此環境變數可以設定日誌檔案保存的位置。注意,如果 TF_LOG_PATH
被設定了,那麼 TF_LOG
也必須被設定。
export TF_LOG_PATH=./terraform.log
TF_INPUT
當環境變數設定為 "false" 或 "0" 時,等同於執行 terraform 相關命令列指令時加入了參數 -input=false
。如果你想在自動化環境下避免 Terraform 透過命令列的互動式提示要求給定輸入變數的值而是直接報錯時(無 default 值的輸入變量,無法透過任何途徑獲得值)可以設定該環境變數:
export TF_INPUT=0
TF_VAR_name
我們在介紹輸入變數賦值時介紹過,可以透過設定名為 TF_VAR_name
的環境變數來為名為 "name" 的輸入變數賦值:
export TF_VAR_region=us-west-1
export TF_VAR_ami=ami-049d8641
export TF_VAR_alist='[1,2,3]'
export TF_VAR_amap='{ foo = "bar", baz = "qux" }'
TF_CLI_ARGS 以及 TF_CLI_ARGS_name
TF_CLI_ARGS
的值指定了附加給命令列的額外參數,這使得在自動化 CI 環境下可以輕鬆自訂 Terraform 的預設行為。
此參數的值會直接插入在子命令後(例如 plan)以及透過命令列指定的參數之前。這種做法確保了環境變數參數優先於透過命令列傳遞的參數。
例如,執行這樣的指令: TF_CLI_ARGS="-input=false" terraform apply -force
,它等價於手動執行 terraform apply -input=false -force
。
TF_CLI_ARGS
變數會影響所有的 Terraform指令。如果你只想影響某個特定的子指令,可以使用 TF_CLI_ARGS_name
變數。例如:TF_CLI_ARGS_plan="-refresh=false"
,就只會針對 plan 子指令運作。
這個環境變數的值會與透過命令列傳入的參數一樣被解析,你可以在值裡使用單引號和雙引號來定義字串,多個參數之間以空格分隔。
TF_DATA_DIR
TF_DATA_DIR
可以修改 Terraform 保存在每個工作目錄下的資料的位置。一般來說,Terraform 會把這些資料寫入目前工作目錄下的 .terraform
資料夾內,但這個位置可以透過設定 TF_DATA_DIR
來修改。
大部分情況下我們不應該設定該變量,但有時我們不得不這樣做,例如預設路徑下我們無權寫入資料時。
這個數據目錄被用來保存下一次執行任意命令時需要讀取的數據,所以必須被妥善保存,並確保所 有的 Terraform 命令都可以一致地讀寫它,否則 Terraform 會找不到 Provider 套件、模組代碼以及其他文件。
TF_IN_AUTOMATION
如果該變數被設定為非空值,Terraform 會意識到自己運行在一個自動化環境下,從而調整自己的輸出以避免給出關於該執行什麼子命令的建議。這可以使得輸出更加一致且減少非必要的資訊量。
TF_REGISTRY_DISCOVERY_RETRY
此變數定義了嘗試從 registry 拉取套件或模組程式碼遇到錯誤時的重試次數。
TF_REGISTRY_CLIENT_TIMEOUT
此變數定義了發送到 registry 連線請求的逾時時間,預設值為 10 秒。可以這樣設定超時:
export TF_REGISTRY_CLIENT_TIMEOUT=15
TF_CLI_CONFIG_FILE
該變數設定了 Terraform 命令列設定檔的位置:
export TF_CLI_CONFIG_FILE="$HOME/.terraformrc-custom"